home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zi.d64
/
txt.pitfall
< prev
next >
Wrap
Text File
|
2007-03-01
|
4KB
|
211 lines
┴ ╨ITFALL ╞OR ╨ROGRAMMERS
BY ─ICK ╦LINGENS AND ╩OE ╓ISSER
─UTCH ├╧═┴╠ ╒SERS ╟ROUP
1. ╔NTRO
╘HE TITLE OF THIS ARTICLE SOUNDS
SOMEWHAT NEGATIVE, BUT THAT IS NOT
ENTIRELY WRONG. ┬Y ITS COMPLEXITY
├╧═┴╠ OFFERS THE PROGRAMMER SOME
TIMES STRANGE EFFECTS.
2. ╥┼╞ PARAMETERS
═ANY HIGH LEVEL PROGRAMMING LANGUAGES
SUPPORT PARAMETER TRANFER INTO
PROCEDURES IN ONE WAY OR ANOTHER. ╙O
DOES ├╧═┴╠. ╠IKE IN ╨ASCAL THERE ARE
TWO PARAMETER TYPES, VALUE PARAMETERS
AND REFERENCED PARAMETERS.
╠OOK AT THE FOLLOWING PROCEDURE
HEADING
╨╥╧├ ONE(X, ╥┼╞ Y) ├╠╧╙┼─
╘HIS PROCEDURE HAS PARAMETERS OF EACH
TYPE:
X IS A VALUE PARAMETER
Y IS A REFERENCED PARAMETER.
╘HE DIFFERENCE BETWEEN THESE TYPES
IS, THAT AFTER A CALL OF THE
PROCEDURE ╧╬┼ A ╓┴╠╒┼ IS TRANSFERRED
TO ╪ AND A ╓┴╥╔┴┬╠┼ TO ┘ (INCLUDING
THE VARIABLE'S VALUE). ╘HE VARIABLES
╪ AND ┘ BOTH DIES IMMEDIATELY AFTER
LEAVING THE (├╠╧╙┼─) PROCEDURE, BUT
BEFORE THAT, ┘ RETURNS ITS VALUE TO
THE ACTUAL PARAMETER IN THE PROCEDURE
CALL.
╙O THE CALL
┼╪┼├ ONE(4,7)
IS ILLEGAL, BECAUSE THE SECOND
PARAMETER, 7, IS NOT A VARIABLE.
╚OWEVER, AFTER THE CALL
┼╪┼├ ONE(4,HI)
THE VARIABLE ╚╔ HAS THE SAME VALUE AS
┘ JUST BEFORE ┘ STOPPED TO EXIST.
3. ╔NSIDE ├╧═┴╠
├╧═┴╠ SEES ITS VARIABLES CONSISTING
OF THREE PARTS:
1. ITS NAME
2. A POINTER TO ITS VALUE
3. ITS VALUE
╘HE POINTER PART POINTS AT THE VALUE,
LIKE THIS:
+1------+2--+ +3------+
! HI ! O---->! 25 !
+-------+---+ +-------+
SAYING THAT ╚╔ HAS THE VALUE 25.
╙UPPOSE THAT THE PROCEDURE ╧╬┼ IS
CALLED WITH
┼╪┼├ ONE(4,HI)
╬OW WE HAVE
+1------+2--+ +3------+
! HI ! O---->! 25 !<---+
+-------+---+ +-------+ !
!
!
+1------+2--+ !
! Y ! O------------------+
+-------+---+
+1------+2--+ +3------+
! X ! O---->! 4 !
+-------+---+ +-------+
╘WO NEW VARIABLES ARE CREATED
TEMPORARELY. ╪ HAS ITS OWN VALUE
PART; THE POINTER PART OF ┘ POINTS AT
THE VALUE PART OF ╚╔.
├HANGING ┘ MEANS CHANGING ╚╔ TOO.
╘HIS IS WHY THE VALUE OF ╚╔ EQUALS
THE VALUE OF ┘ WHEN WE LEAVE THE
PROCEDURE.
4. ├ONSEQUENCES
╠OOK AT THE PROCEDURE
╨╥╧├ TWO(╥┼╞ X, ╥┼╞ Y) ├╠╧╙┼─
X:=1
╨╥╔╬╘ Y
┼╬─╨╥╧├ TWO
╫E HAVE A VARIABLE ┴ WITH ┴:=9.
╘HE CALL
┼╪┼├ TWO(A,A)
GIVES THE OUTPUT 1, AND ╬╧╘ 9, AS
PERHAPS EXPECTED. ╫┼ DIDN'T CHANGE
THE VALUE OF ┘, DID WE? ╫E ONLY DID
WITH ╪. ├╧═┴╠ DID!
╫E ILLUSTRATE WITH A DIAGRAM AS
INTRODUCED IN 2.
+1------+2--+ +3------+
! A ! O---->! 9 !<---+
+-------+---+ +-------+ !
! !
! !
+1------+2--+ ! !
! X ! O---------+ !
+-------+---+ !
!
+1------+2--+ !
! Y ! O------------------+
+-------+---+
┬OTH ╪ AND ┘ ARE POINTING AT THE SAME
VALUE PART (THAT OF ┴). ┬ECAUSE OF
THIS IT'S NOT SURPISING THAT
X:=1
HAS SOME INFLUENCE ON THE VALUE OF ┘.
┘OU WILL SAY THAT IN PROGRAMMING
PRACTICE THERE NEVER WILL BE A
SITUATION IN WHICH TWO ╥┼╞ PARAMETERS
ARE EQUAL. ╘HIS IS LESS TRUE, THAN IS
LOOKS AT FIRST SIGHT. ╫E'LL EXPLAIN
WHY.
┼XAMINE THE PROCEDURE ╙╫┴╨, WHICH
SWAPS THE VALUES OF TWO VARIABLES
WITHOUT A THIRD ONE.
╨╥╧├ SWAP (╥┼╞ X, ╥┼╞ Y) ├╠╧╙┼─
X := X + Y
Y := X - Y
X := X - Y
┼╬─╨╥╧├ SWAP
╫ITH
A:=9; B:=10
┼╪┼├ SWAP(A,B)
╨╥╔╬╘ A; B
WE FIND
10 9
AS OUTPUT.
╫ITH
A:=9
┼╪┼├ SWAP(A,A)
╨╥╔╬╘ A
THE OUTPUT IS 0. ╚OW COME? ─RAW A
DIAGRAM YOURSELF OR DO SOME MINOR
MATHEMATICS
A := A + A
A := A - A
A := A - A
╬O ONE WILL EVER PROGRAM A STATEMENT
SUCH AS
┼╪┼├ SWAP(A,A)
BUT IT IS POSSIBLE TO TRANSFER
ELEMENTS OF AN ARRAY INTO THE
PROCEDURE ╙╫┴╨ AND CALL
┼╪┼├ SWAP(B(I), B(J))
┘OU WILL FIND SOME UNEXPECTED EFFECTS
IF I=J, AND THEN THE CAUSE IS NOT SO
OBVIOUS.